#include "cmsis_os.h"
#include "SensorTask.h"
#include "adc.h"
#include <stdio.h>

uint32_t adcBuffer[3]; // 存放 AO1, AO2, AO3

double TDS_Decode(void) {
    // 对 adcBuffer 中数据的处理代码
    auto adc_rawdata = adcBuffer[1];
    // 将ADC原始值转换为电压值（ADC参考电压为3.3V，12位分辨率）
    auto voltage = (adc_rawdata * 3.3) / 4095.0;
    // 使用拟合公式计算TDS值：y = 66.71x³ - 127.93x² + 428.7x
    auto tds_value = 66.71 * voltage * voltage * voltage - 127.93 * voltage * voltage + 428.7 * voltage;
    // 可以根据需要将TDS值存储到全局变量或进行其他处理
    // 例如：g_tds_value = tds_value;
    // 添加范围限制（根据实际传感器特性）
    if (tds_value < 0) tds_value = 0;
    if (tds_value > 1400) tds_value = 1400; // 根据图表最大值为1400

    // 这里可以添加输出、显示或传输TDS值的代码
    return tds_value;
}

void Sensor_Task(void const *argument) {
    // 启动 ADC DMA 扫描
    HAL_ADC_Start_DMA(&hadc1, adcBuffer, 3);

    while (1) {
        // printf("AO1=%lu, AO2=%lu, AO3=%lu\r\n",
        //        adcBuffer[0], adcBuffer[1], adcBuffer[2]);
        auto current_tds = TDS_Decode();
        printf("当前TDS值: %.2f \n", current_tds);
        osDelay(500);
    }
}
